#include <head.h>

/*
需要优化 发送信息等待时 不能及时接收到信息
创建线程？
*/


int main(int argc, char const *argv[])
{
    // 判断是否输入端口号
    if (2 != argc)
    {
        printf("格式错误 port \n");
        exit(-1);
    }
    

    // 创建客户端套接字
    int sock_client = socket(AF_INET , SOCK_DGRAM , 0);
    // 判断套接字创建是否成功
    if (-1 == sock_client)
    {
        printf("套接字创建失败\n");
        exit(-1);
    }


    // 填写服务器信息结构体
        // 创建结构体
        struct sockaddr_in server_addr;
        // 清空结构体
        memset(&server_addr , 0 , sizeof(server_addr));
        // 填写
        server_addr.sin_family = AF_INET;                   // IPV4
        server_addr.sin_port = htons(atoi(argv[1]));        // port
        server_addr.sin_addr.s_addr = inet_addr("0.0.0.0"); // IP

        socklen_t server_addr_len = sizeof(server_addr);

        // 接收缓冲区
        char buf_recv[1024];
        // 发送缓冲区
        char buf_send[1024];

        // 清空缓冲区
        memset(buf_recv , 0 , sizeof(buf_recv));
        memset(buf_recv , 0 , sizeof(buf_recv));

        while (1)
        {
            printf("发送信息:");
            scanf("%s" , buf_send);

            // 发送信息
            sendto(sock_client , buf_send , strlen(buf_send) , 0 , (struct sockaddr *)&server_addr , server_addr_len);
            // 清空发送缓冲区
            memset(buf_send , 0 , sizeof(buf_send));

            // 等待接收信息
            recvfrom(sock_client , buf_recv , sizeof(buf_recv) , 0 , (struct sockaddr *)&server_addr , &server_addr_len);
            printf("接收信息: %s\n" , buf_recv);
            // 清空接收缓冲区
            memset(buf_recv , 0 , sizeof(buf_recv));
        }

        // 关闭套接字
        close(sock_client);
        return 0;
        

        
    
    return 0;
}